home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1992 June: ROMin Holiday / ADC Developer CD (1992-06) (''ROMin Holiday'')_iso / Developer Connection - 06-1992.iso / Developer Essentials / MPW Interfaces & Libraries / AIncludes / SANEMacs.a < prev    next >
Encoding:
Text File  |  1992-01-29  |  27.9 KB  |  1,571 lines  |  [TEXT/MPS ]

  1. ; Version: 1.02
  2. ; Created: Tuesday, August 2, 1988 at 9:48:22 PM
  3. ; File: SANEMacs.a
  4. ;
  5. ; Copyright Apple Computer, Inc. 1984, 1985, 1986, 1987, 1989, 1990, 1991
  6. ; All Rights Reserved
  7. ;
  8. ; SANE Numerics -- This file defines the assembly language
  9. ; access to the 68K floating-point arithmetic routines. It is
  10. ; documented in the Apple Numerics Manual.
  11. ;
  12. ;************************************************************
  13. ;———————————————————————————————————————————————————————————
  14. ; Operation code masks.
  15. ;———————————————————————————————————————————————————————————
  16. FOADD            EQU         $0000                    ; add
  17. FOSUB            EQU         $0002                    ; subtract
  18. FOMUL            EQU         $0004                    ; multiply
  19. FODIV            EQU         $0006                    ; divide
  20. FOCMP            EQU         $0008                    ; compare, no exception from unordered
  21. FOCPX            EQU         $000A                    ; compare, signal invalid if unordered
  22. FOREM            EQU         $000C                    ; remainder
  23. FOZ2X            EQU         $000E                    ; convert to extended
  24. FOX2Z            EQU         $0010                    ; convert from extended
  25. FOSQRT            EQU         $0012                    ; square root
  26. FORTI            EQU         $0014                    ; round to integral value
  27. FOTTI            EQU         $0016                    ; truncate to integral value
  28. FOSCALB         EQU         $0018                    ; binary scale
  29. FOLOGB            EQU         $001A                    ; binary log
  30. FOCLASS         EQU         $001C                    ; classify
  31. ; UNDEFINED EQU $001E
  32.  
  33. FOSETENV        EQU         $0001                    ; set environment
  34. FOGETENV        EQU         $0003                    ; get environment
  35. FOSETHV         EQU         $0005                    ; set halt vector
  36. FOGETHV         EQU         $0007                    ; get halt vector
  37. FOD2B            EQU         $0009                    ; convert decimal to binary
  38. FOB2D            EQU         $000B                    ; convert binary to decimal
  39. FONEG            EQU         $000D                    ; negate
  40. FOABS            EQU         $000F                    ; absolute
  41. FOCPYSGN        EQU         $0011                    ; copy sign
  42. FONEXT            EQU         $0013                    ; next-after
  43. FOSETXCP        EQU         $0015                    ; set exception
  44. FOPROCENTRY     EQU         $0017                    ; procedure entry
  45. FOPROCEXIT        EQU         $0019                    ; procedure exit
  46. FOTESTXCP        EQU         $001B                    ; test exception
  47. ; UNDEFINED EQU $001D
  48. ; UNDEFINED EQU $001F
  49.  
  50.  
  51. ;———————————————————————————————————————————————————————————
  52. ; Operand format masks.
  53. ;———————————————————————————————————————————————————————————
  54. FFEXT            EQU         $0000                    ; extended -- 80-bit float
  55. FFEXT96            EQU            $0020                    ; extended -- 96-bit float
  56. FFDBL            EQU         $0800                    ; double -- 64-bit float
  57. FFSGL            EQU         $1000                    ; single -- 32-bit float
  58. FFINT            EQU         $2000                    ; integer -- 16-bit integer
  59. FFLNG            EQU         $2800                    ; long int -- 32-bit integer
  60. FFCOMP            EQU         $3000                    ; comp -- 64-bit integer
  61.  
  62. ;———————————————————————————————————————————————————————————
  63. ; Operations: operand addresses should already be on
  64. ; the stack, with the destination address on top. The
  65. ; suffix X, D, S, C, I, or L determines the format of the
  66. ; source operand -- extended, double, single, comp,
  67. ; integer, or long integer, respectively; the destination
  68. ; operand is always extended.
  69. ;———————————————————————————————————————————————————————————
  70.  
  71.  
  72. ;———————————————————————————————————————————————————————————
  73. ; Addition.
  74. ;———————————————————————————————————————————————————————————
  75. ; 80-bit extended format
  76.                 MACRO
  77.                 FADDX
  78.                 MOVE.W        #FFEXT+FOADD,-(SP)
  79.                 _FP68K
  80.                 ENDM
  81.  
  82.                 MACRO
  83.                 FADDD
  84.                 MOVE.W        #FFDBL+FOADD,-(SP)
  85.                 _FP68K
  86.                 ENDM
  87.  
  88.                 MACRO
  89.                 FADDS
  90.                 MOVE.W        #FFSGL+FOADD,-(SP)
  91.                 _FP68K
  92.                 ENDM
  93.  
  94.                 MACRO
  95.                 FADDC
  96.                 MOVE.W        #FFCOMP+FOADD,-(SP)
  97.                 _FP68K
  98.                 ENDM
  99.  
  100.                 MACRO
  101.                 FADDI
  102.                 MOVE.W        #FFINT+FOADD,-(SP)
  103.                 _FP68K
  104.                 ENDM
  105.  
  106.                 MACRO
  107.                 FADDL
  108.                 MOVE.W        #FFLNG+FOADD,-(SP)
  109.                 _FP68K
  110.                 ENDM
  111.  
  112. ; 96-bit extended format
  113.                 MACRO
  114.                 FADDX96
  115.                 MOVE.W        #FFEXT96+FOADD,-(SP)
  116.                 _FP68K
  117.                 ENDM
  118.  
  119.                 MACRO
  120.                 FADDD96
  121.                 MOVE.W        #FFDBL+FFEXT96+FOADD,-(SP)
  122.                 _FP68K
  123.                 ENDM
  124.  
  125.                 MACRO
  126.                 FADDS96
  127.                 MOVE.W        #FFSGL+FFEXT96+FOADD,-(SP)
  128.                 _FP68K
  129.                 ENDM
  130.  
  131.                 MACRO
  132.                 FADDC96
  133.                 MOVE.W        #FFCOMP+FFEXT96+FOADD,-(SP)
  134.                 _FP68K
  135.                 ENDM
  136.  
  137.                 MACRO
  138.                 FADDI96
  139.                 MOVE.W        #FFINT+FFEXT96+FOADD,-(SP)
  140.                 _FP68K
  141.                 ENDM
  142.  
  143.                 MACRO
  144.                 FADDL96
  145.                 MOVE.W        #FFLNG+FFEXT96+FOADD,-(SP)
  146.                 _FP68K
  147.                 ENDM
  148.  
  149. ;———————————————————————————————————————————————————————————
  150. ; Subtraction.
  151. ;———————————————————————————————————————————————————————————
  152. ; 80-bit extended format
  153.                 MACRO
  154.                 FSUBX
  155.                 MOVE.W        #FFEXT+FOSUB,-(SP)
  156.                 _FP68K
  157.                 ENDM
  158.  
  159.                 MACRO
  160.                 FSUBD
  161.                 MOVE.W        #FFDBL+FOSUB,-(SP)
  162.                 _FP68K
  163.                 ENDM
  164.  
  165.                 MACRO
  166.                 FSUBS
  167.                 MOVE.W        #FFSGL+FOSUB,-(SP)
  168.                 _FP68K
  169.                 ENDM
  170.  
  171.                 MACRO
  172.                 FSUBC
  173.                 MOVE.W        #FFCOMP+FOSUB,-(SP)
  174.                 _FP68K
  175.                 ENDM
  176.  
  177.                 MACRO
  178.                 FSUBI
  179.                 MOVE.W        #FFINT+FOSUB,-(SP)
  180.                 _FP68K
  181.                 ENDM
  182.  
  183.                 MACRO
  184.                 FSUBL
  185.                 MOVE.W        #FFLNG+FOSUB,-(SP)
  186.                 _FP68K
  187.                 ENDM
  188.  
  189. ; 96-bit extended format
  190.                 MACRO
  191.                 FSUBX96
  192.                 MOVE.W        #FFEXT96+FOSUB,-(SP)
  193.                 _FP68K
  194.                 ENDM
  195.  
  196.                 MACRO
  197.                 FSUBD96
  198.                 MOVE.W        #FFDBL+FFEXT96+FOSUB,-(SP)
  199.                 _FP68K
  200.                 ENDM
  201.  
  202.                 MACRO
  203.                 FSUBS96
  204.                 MOVE.W        #FFSGL+FFEXT96+FOSUB,-(SP)
  205.                 _FP68K
  206.                 ENDM
  207.  
  208.                 MACRO
  209.                 FSUBC96
  210.                 MOVE.W        #FFCOMP+FFEXT96+FOSUB,-(SP)
  211.                 _FP68K
  212.                 ENDM
  213.  
  214.                 MACRO
  215.                 FSUBI96
  216.                 MOVE.W        #FFINT+FFEXT96+FOSUB,-(SP)
  217.                 _FP68K
  218.                 ENDM
  219.  
  220.                 MACRO
  221.                 FSUBL96
  222.                 MOVE.W        #FFLNG+FFEXT96+FOSUB,-(SP)
  223.                 _FP68K
  224.                 ENDM
  225.  
  226. ;———————————————————————————————————————————————————————————
  227. ; Multiplication.
  228. ;———————————————————————————————————————————————————————————
  229. ; 80-bit extended format
  230.                 MACRO
  231.                 FMULX
  232.                 MOVE.W        #FFEXT+FOMUL,-(SP)
  233.                 _FP68K
  234.                 ENDM
  235.  
  236.                 MACRO
  237.                 FMULD
  238.                 MOVE.W        #FFDBL+FOMUL,-(SP)
  239.                 _FP68K
  240.                 ENDM
  241.  
  242.                 MACRO
  243.                 FMULS
  244.                 MOVE.W        #FFSGL+FOMUL,-(SP)
  245.                 _FP68K
  246.                 ENDM
  247.  
  248.                 MACRO
  249.                 FMULC
  250.                 MOVE.W        #FFCOMP+FOMUL,-(SP)
  251.                 _FP68K
  252.                 ENDM
  253.  
  254.                 MACRO
  255.                 FMULI
  256.                 MOVE.W        #FFINT+FOMUL,-(SP)
  257.                 _FP68K
  258.                 ENDM
  259.  
  260.                 MACRO
  261.                 FMULL
  262.                 MOVE.W        #FFLNG+FOMUL,-(SP)
  263.                 _FP68K
  264.                 ENDM
  265.  
  266. ; 96-bit extended format
  267.                 MACRO
  268.                 FMULX96
  269.                 MOVE.W        #FFEXT96+FOMUL,-(SP)
  270.                 _FP68K
  271.                 ENDM
  272.  
  273.                 MACRO
  274.                 FMULD96
  275.                 MOVE.W        #FFDBL+FFEXT96+FOMUL,-(SP)
  276.                 _FP68K
  277.                 ENDM
  278.  
  279.                 MACRO
  280.                 FMULS96
  281.                 MOVE.W        #FFSGL+FFEXT96+FOMUL,-(SP)
  282.                 _FP68K
  283.                 ENDM
  284.  
  285.                 MACRO
  286.                 FMULC96
  287.                 MOVE.W        #FFCOMP+FFEXT96+FOMUL,-(SP)
  288.                 _FP68K
  289.                 ENDM
  290.  
  291.                 MACRO
  292.                 FMULI96
  293.                 MOVE.W        #FFINT+FFEXT96+FOMUL,-(SP)
  294.                 _FP68K
  295.                 ENDM
  296.  
  297.                 MACRO
  298.                 FMULL96
  299.                 MOVE.W        #FFLNG+FFEXT96+FOMUL,-(SP)
  300.                 _FP68K
  301.                 ENDM
  302.  
  303. ;———————————————————————————————————————————————————————————
  304. ; Division.
  305. ;———————————————————————————————————————————————————————————
  306. ; 80-bit extended format
  307.                 MACRO
  308.                 FDIVX
  309.                 MOVE.W        #FFEXT+FODIV,-(SP)
  310.                 _FP68K
  311.                 ENDM
  312.  
  313.                 MACRO
  314.                 FDIVD
  315.                 MOVE.W        #FFDBL+FODIV,-(SP)
  316.                 _FP68K
  317.                 ENDM
  318.  
  319.                 MACRO
  320.                 FDIVS
  321.                 MOVE.W        #FFSGL+FODIV,-(SP)
  322.                 _FP68K
  323.                 ENDM
  324.  
  325.                 MACRO
  326.                 FDIVC
  327.                 MOVE.W        #FFCOMP+FODIV,-(SP)
  328.                 _FP68K
  329.                 ENDM
  330.  
  331.                 MACRO
  332.                 FDIVI
  333.                 MOVE.W        #FFINT+FODIV,-(SP)
  334.                 _FP68K
  335.                 ENDM
  336.  
  337.                 MACRO
  338.                 FDIVL
  339.                 MOVE.W        #FFLNG+FODIV,-(SP)
  340.                 _FP68K
  341.                 ENDM
  342.  
  343. ; 96-bit extended format
  344.                 MACRO
  345.                 FDIVX96
  346.                 MOVE.W        #FFEXT96+FODIV,-(SP)
  347.                 _FP68K
  348.                 ENDM
  349.  
  350.                 MACRO
  351.                 FDIVD96
  352.                 MOVE.W        #FFDBL+FFEXT96+FODIV,-(SP)
  353.                 _FP68K
  354.                 ENDM
  355.  
  356.                 MACRO
  357.                 FDIVS96
  358.                 MOVE.W        #FFSGL+FFEXT96+FODIV,-(SP)
  359.                 _FP68K
  360.                 ENDM
  361.  
  362.                 MACRO
  363.                 FDIVC96
  364.                 MOVE.W        #FFCOMP+FFEXT96+FODIV,-(SP)
  365.                 _FP68K
  366.                 ENDM
  367.  
  368.                 MACRO
  369.                 FDIVI96
  370.                 MOVE.W        #FFINT+FFEXT96+FODIV,-(SP)
  371.                 _FP68K
  372.                 ENDM
  373.  
  374.                 MACRO
  375.                 FDIVL96
  376.                 MOVE.W        #FFLNG+FFEXT96+FODIV,-(SP)
  377.                 _FP68K
  378.                 ENDM
  379.  
  380. ;———————————————————————————————————————————————————————————
  381. ; Square root.
  382. ;———————————————————————————————————————————————————————————
  383. ; 80-bit extended format
  384.                 MACRO
  385.                 FSQRTX
  386.                 MOVE.W        #FOSQRT,-(SP)
  387.                 _FP68K
  388.                 ENDM
  389.  
  390. ; 96-bit extended format
  391.                 MACRO
  392.                 FSQRTX96
  393.                 MOVE.W        #FFEXT96+FOSQRT,-(SP)
  394.                 _FP68K
  395.                 ENDM
  396.  
  397. ;———————————————————————————————————————————————————————————
  398. ; Round to integer, according to the current rounding mode.
  399. ;———————————————————————————————————————————————————————————
  400. ; 80-bit extended format
  401.                 MACRO
  402.                 FRINTX
  403.                 MOVE.W        #FORTI,-(SP)
  404.                 _FP68K
  405.                 ENDM
  406.  
  407. ; 96-bit extended format
  408.                 MACRO
  409.                 FRINTX96
  410.                 MOVE.W        #FFEXT96+FORTI,-(SP)
  411.                 _FP68K
  412.                 ENDM
  413.  
  414. ;———————————————————————————————————————————————————————————
  415. ; Truncate to integer, using round toward zero.
  416. ;———————————————————————————————————————————————————————————
  417. ; 80-bit extended format
  418.                 MACRO
  419.                 FTINTX
  420.                 MOVE.W        #FOTTI,-(SP)
  421.                 _FP68K
  422.                 ENDM
  423.  
  424. ; 96-bit extended format
  425.                 MACRO
  426.                 FTINTX96
  427.                 MOVE.W        #FFEXT96+FOTTI,-(SP)
  428.                 _FP68K
  429.                 ENDM
  430.  
  431. ;———————————————————————————————————————————————————————————
  432. ; Remainder.
  433. ;———————————————————————————————————————————————————————————
  434. ; 80-bit extended format
  435.                 MACRO
  436.                 FREMX
  437.                 MOVE.W        #FFEXT+FOREM,-(SP)
  438.                 _FP68K
  439.                 ENDM
  440.  
  441.                 MACRO
  442.                 FREMD
  443.                 MOVE.W        #FFDBL+FOREM,-(SP)
  444.                 _FP68K
  445.                 ENDM
  446.  
  447.                 MACRO
  448.                 FREMS
  449.                 MOVE.W        #FFSGL+FOREM,-(SP)
  450.                 _FP68K
  451.                 ENDM
  452.  
  453.                 MACRO
  454.                 FREMC
  455.                 MOVE.W        #FFCOMP+FOREM,-(SP)
  456.                 _FP68K
  457.                 ENDM
  458.  
  459.                 MACRO
  460.                 FREMI
  461.                 MOVE.W        #FFINT+FOREM,-(SP)
  462.                 _FP68K
  463.                 ENDM
  464.  
  465.                 MACRO
  466.                 FREML
  467.                 MOVE.W        #FFLNG+FOREM,-(SP)
  468.                 _FP68K
  469.                 ENDM
  470.  
  471. ; 96-bit extended format
  472.                 MACRO
  473.                 FREMX96
  474.                 MOVE.W        #FFEXT96+FOREM,-(SP)
  475.                 _FP68K
  476.                 ENDM
  477.  
  478.                 MACRO
  479.                 FREMD96
  480.                 MOVE.W        #FFDBL+FFEXT96+FOREM,-(SP)
  481.                 _FP68K
  482.                 ENDM
  483.  
  484.                 MACRO
  485.                 FREMS96
  486.                 MOVE.W        #FFSGL+FFEXT96+FOREM,-(SP)
  487.                 _FP68K
  488.                 ENDM
  489.  
  490.                 MACRO
  491.                 FREMC96
  492.                 MOVE.W        #FFCOMP+FFEXT96+FOREM,-(SP)
  493.                 _FP68K
  494.                 ENDM
  495.  
  496.                 MACRO
  497.                 FREMI96
  498.                 MOVE.W        #FFINT+FFEXT96+FOREM,-(SP)
  499.                 _FP68K
  500.                 ENDM
  501.  
  502.                 MACRO
  503.                 FREML96
  504.                 MOVE.W        #FFLNG+FFEXT96+FOREM,-(SP)
  505.                 _FP68K
  506.                 ENDM
  507.  
  508. ;———————————————————————————————————————————————————————————
  509. ; Logb.
  510. ;———————————————————————————————————————————————————————————
  511. ; 80-bit extended format
  512.                 MACRO
  513.                 FLOGBX
  514.                 MOVE.W        #FOLOGB,-(SP)
  515.                 _FP68K
  516.                 ENDM
  517.  
  518. ; 96-bit extended format
  519.                 MACRO
  520.                 FLOGBX96
  521.                 MOVE.W        #FFEXT96+FOLOGB,-(SP)
  522.                 _FP68K
  523.                 ENDM
  524.  
  525. ;———————————————————————————————————————————————————————————
  526. ; Scalb.
  527. ;———————————————————————————————————————————————————————————
  528. ; 80-bit extended format
  529.                 MACRO
  530.                 FSCALBX
  531.                 MOVE.W        #FFINT+FOSCALB,-(SP)
  532.                 _FP68K
  533.                 ENDM
  534.  
  535. ; 96-bit extended format
  536.                 MACRO
  537.                 FSCALBX96
  538.                 MOVE.W        #FFINT+FFEXT96+FOSCALB,-(SP)
  539.                 _FP68K
  540.                 ENDM
  541.  
  542. ;———————————————————————————————————————————————————————————
  543. ; Copy-sign.
  544. ;———————————————————————————————————————————————————————————
  545. ; 80-bit extended format
  546.                 MACRO
  547.                 FCPYSGNX
  548.                 MOVE.W        #FOCPYSGN,-(SP)
  549.                 _FP68K
  550.                 ENDM
  551.  
  552. ; 96-bit extended format
  553.                 MACRO
  554.                 FCPYSGNX96
  555.                 MOVE.W        #FFEXT96+FOCPYSGN,-(SP)
  556.                 _FP68K
  557.                 ENDM
  558.  
  559. ;———————————————————————————————————————————————————————————
  560. ; Negate.
  561. ;———————————————————————————————————————————————————————————
  562. ; 80-bit extended format
  563.                 MACRO
  564.                 FNEGX
  565.                 MOVE.W        #FONEG,-(SP)
  566.                 _FP68K
  567.                 ENDM
  568.  
  569. ; 96-bit extended format
  570.                 MACRO
  571.                 FNEGX96
  572.                 MOVE.W        #FFEXT96+FONEG,-(SP)
  573.                 _FP68K
  574.                 ENDM
  575.  
  576. ;———————————————————————————————————————————————————————————
  577. ; Absolute value.
  578. ;———————————————————————————————————————————————————————————
  579. ; 80-bit extended format
  580.                 MACRO
  581.                 FABSX
  582.                 MOVE.W        #FOABS,-(SP)
  583.                 _FP68K
  584.                 ENDM
  585.  
  586. ; 96-bit extended format
  587.                 MACRO
  588.                 FABSX96
  589.                 MOVE.W        #FFEXT96+FOABS,-(SP)
  590.                 _FP68K
  591.                 ENDM
  592.  
  593. ;———————————————————————————————————————————————————————————
  594. ; Next-after. NOTE: both operands are of the same
  595. ; format, as specified by the usual suffix.
  596. ;———————————————————————————————————————————————————————————
  597.                 MACRO
  598.                 FNEXTS
  599.                 MOVE.W        #FFSGL+FONEXT,-(SP)
  600.                 _FP68K
  601.                 ENDM
  602.  
  603.                 MACRO
  604.                 FNEXTD
  605.                 MOVE.W        #FFDBL+FONEXT,-(SP)
  606.                 _FP68K
  607.                 ENDM
  608.  
  609. ; 80-bit extended format
  610.                 MACRO
  611.                 FNEXTX
  612.                 MOVE.W        #FFEXT+FONEXT,-(SP)
  613.                 _FP68K
  614.                 ENDM
  615.  
  616. ; 96-bit extended format
  617.                 MACRO
  618.                 FNEXTX96
  619.                 MOVE.W        #FFEXT96+FONEXT,-(SP)
  620.                 _FP68K
  621.                 ENDM
  622.  
  623. ;———————————————————————————————————————————————————————————
  624. ; Conversion to 80-bit extended.
  625. ;———————————————————————————————————————————————————————————
  626.                 MACRO
  627.                 FX2X
  628.                 MOVE.W        #FFEXT+FOZ2X,-(SP)
  629.                 _FP68K
  630.                 ENDM
  631.  
  632.                 MACRO
  633.                 FD2X
  634.                 MOVE.W        #FFDBL+FOZ2X,-(SP)
  635.                 _FP68K
  636.                 ENDM
  637.  
  638.                 MACRO
  639.                 FS2X
  640.                 MOVE.W        #FFSGL+FOZ2X,-(SP)
  641.                 _FP68K
  642.                 ENDM
  643.  
  644.                 MACRO
  645.                 FI2X
  646.                 MOVE.W        #FFINT+FOZ2X,-(SP)
  647.                 _FP68K
  648.                 ENDM
  649.  
  650.                 MACRO
  651.                 FL2X
  652.                 MOVE.W        #FFLNG+FOZ2X,-(SP)
  653.                 _FP68K
  654.                 ENDM
  655.  
  656.                 MACRO
  657.                 FC2X
  658.                 MOVE.W        #FFCOMP+FOZ2X,-(SP)
  659.                 _FP68K
  660.                 ENDM
  661.  
  662. ;———————————————————————————————————————————————————————————
  663. ; Conversion to 96-bit extended.
  664. ;———————————————————————————————————————————————————————————
  665.                 MACRO
  666.                 FX2X96
  667.                 MOVE.W        #FFEXT96+FOZ2X,-(SP)
  668.                 _FP68K
  669.                 ENDM
  670.  
  671.                 MACRO
  672.                 FD2X96
  673.                 MOVE.W        #FFDBL+FFEXT96+FOZ2X,-(SP)
  674.                 _FP68K
  675.                 ENDM
  676.  
  677.                 MACRO
  678.                 FS2X96
  679.                 MOVE.W        #FFSGL+FFEXT96+FOZ2X,-(SP)
  680.                 _FP68K
  681.                 ENDM
  682.  
  683.                 MACRO
  684.                 FI2X96
  685.                 MOVE.W        #FFINT+FFEXT96+FOZ2X,-(SP)
  686.                 _FP68K
  687.                 ENDM
  688.  
  689.                 MACRO
  690.                 FL2X96
  691.                 MOVE.W        #FFLNG+FFEXT96+FOZ2X,-(SP)
  692.                 _FP68K
  693.                 ENDM
  694.  
  695.                 MACRO
  696.                 FC2X96
  697.                 MOVE.W        #FFCOMP+FFEXT96+FOZ2X,-(SP)
  698.                 _FP68K
  699.                 ENDM
  700.  
  701. ;———————————————————————————————————————————————————————————
  702. ; Conversion from 80-bit extended.
  703. ;———————————————————————————————————————————————————————————
  704.                 MACRO
  705.                 FX2D
  706.                 MOVE.W        #FFDBL+FOX2Z,-(SP)
  707.                 _FP68K
  708.                 ENDM
  709.  
  710.                 MACRO
  711.                 FX2S
  712.                 MOVE.W        #FFSGL+FOX2Z,-(SP)
  713.                 _FP68K
  714.                 ENDM
  715.  
  716.                 MACRO
  717.                 FX2I
  718.                 MOVE.W        #FFINT+FOX2Z,-(SP)
  719.                 _FP68K
  720.                 ENDM
  721.  
  722.                 MACRO
  723.                 FX2L
  724.                 MOVE.W        #FFLNG+FOX2Z,-(SP)
  725.                 _FP68K
  726.                 ENDM
  727.  
  728.                 MACRO
  729.                 FX2C
  730.                 MOVE.W        #FFCOMP+FOX2Z,-(SP)
  731.                 _FP68K
  732.                 ENDM
  733.  
  734. ;———————————————————————————————————————————————————————————
  735. ; Conversion from 96-bit extended.
  736. ;———————————————————————————————————————————————————————————
  737.                 MACRO
  738.                 FX2D96
  739.                 MOVE.W        #FFDBL+FFEXT96+FOX2Z,-(SP)
  740.                 _FP68K
  741.                 ENDM
  742.  
  743.                 MACRO
  744.                 FX2S96
  745.                 MOVE.W        #FFSGL+FFEXT96+FOX2Z,-(SP)
  746.                 _FP68K
  747.                 ENDM
  748.  
  749.                 MACRO
  750.                 FX2I96
  751.                 MOVE.W        #FFINT+FFEXT96+FOX2Z,-(SP)
  752.                 _FP68K
  753.                 ENDM
  754.  
  755.                 MACRO
  756.                 FX2L96
  757.                 MOVE.W        #FFLNG+FFEXT96+FOX2Z,-(SP)
  758.                 _FP68K
  759.                 ENDM
  760.  
  761.                 MACRO
  762.                 FX2C96
  763.                 MOVE.W        #FFCOMP+FFEXT96+FOX2Z,-(SP)
  764.                 _FP68K
  765.                 ENDM
  766.  
  767. ;———————————————————————————————————————————————————————————
  768. ; Binary to decimal conversion.
  769. ;———————————————————————————————————————————————————————————
  770. ; 80-bit extended format
  771.                 MACRO
  772.                 FX2DEC
  773.                 MOVE.W        #FFEXT+FOB2D,-(SP)
  774.                 _FP68K
  775.                 ENDM
  776.  
  777. ; 96-bit extended format
  778.                 MACRO
  779.                 FX2DEC96
  780.                 MOVE.W        #FFEXT96+FOB2D,-(SP)
  781.                 _FP68K
  782.                 ENDM
  783.  
  784.                 MACRO
  785.                 FD2DEC
  786.                 MOVE.W        #FFDBL+FOB2D,-(SP)
  787.                 _FP68K
  788.                 ENDM
  789.  
  790.                 MACRO
  791.                 FS2DEC
  792.                 MOVE.W        #FFSGL+FOB2D,-(SP)
  793.                 _FP68K
  794.                 ENDM
  795.  
  796.                 MACRO
  797.                 FC2DEC
  798.                 MOVE.W        #FFCOMP+FOB2D,-(SP)
  799.                 _FP68K
  800.                 ENDM
  801.  
  802.                 MACRO
  803.                 FI2DEC
  804.                 MOVE.W        #FFINT+FOB2D,-(SP)
  805.                 _FP68K
  806.                 ENDM
  807.  
  808.                 MACRO
  809.                 FL2DEC
  810.                 MOVE.W        #FFLNG+FOB2D,-(SP)
  811.                 _FP68K
  812.                 ENDM
  813.  
  814. ;———————————————————————————————————————————————————————————
  815. ; Decimal to binary conversion.
  816. ;———————————————————————————————————————————————————————————
  817. ; 80-bit extended format
  818.                 MACRO
  819.                 FDEC2X
  820.                 MOVE.W        #FFEXT+FOD2B,-(SP)
  821.                 _FP68K
  822.                 ENDM
  823.  
  824. ; 96-bit extended format
  825.                 MACRO
  826.                 FDEC2X96
  827.                 MOVE.W        #FFEXT96+FOD2B,-(SP)
  828.                 _FP68K
  829.                 ENDM
  830.  
  831.                 MACRO
  832.                 FDEC2D
  833.                 MOVE.W        #FFDBL+FOD2B,-(SP)
  834.                 _FP68K
  835.                 ENDM
  836.  
  837.                 MACRO
  838.                 FDEC2S
  839.                 MOVE.W        #FFSGL+FOD2B,-(SP)
  840.                 _FP68K
  841.                 ENDM
  842.  
  843.                 MACRO
  844.                 FDEC2C
  845.                 MOVE.W        #FFCOMP+FOD2B,-(SP)
  846.                 _FP68K
  847.                 ENDM
  848.  
  849.                 MACRO
  850.                 FDEC2I
  851.                 MOVE.W        #FFINT+FOD2B,-(SP)
  852.                 _FP68K
  853.                 ENDM
  854.  
  855.                 MACRO
  856.                 FDEC2L
  857.                 MOVE.W        #FFLNG+FOD2B,-(SP)
  858.                 _FP68K
  859.                 ENDM
  860.  
  861. ;———————————————————————————————————————————————————————————
  862. ; Compare, not signaling invalid on unordered.
  863. ;———————————————————————————————————————————————————————————
  864. ; 80-bit extended format
  865.                 MACRO
  866.                 FCMPX
  867.                 MOVE.W        #FFEXT+FOCMP,-(SP)
  868.                 _FP68K
  869.                 ENDM
  870.  
  871.                 MACRO
  872.                 FCMPD
  873.                 MOVE.W        #FFDBL+FOCMP,-(SP)
  874.                 _FP68K
  875.                 ENDM
  876.  
  877.                 MACRO
  878.                 FCMPS
  879.                 MOVE.W        #FFSGL+FOCMP,-(SP)
  880.                 _FP68K
  881.                 ENDM
  882.  
  883.                 MACRO
  884.                 FCMPC
  885.                 MOVE.W        #FFCOMP+FOCMP,-(SP)
  886.                 _FP68K
  887.                 ENDM
  888.  
  889.                 MACRO
  890.                 FCMPI
  891.                 MOVE.W        #FFINT+FOCMP,-(SP)
  892.                 _FP68K
  893.                 ENDM
  894.  
  895.                 MACRO
  896.                 FCMPL
  897.                 MOVE.W        #FFLNG+FOCMP,-(SP)
  898.                 _FP68K
  899.                 ENDM
  900.  
  901. ; 96-bit extended format
  902.                 MACRO
  903.                 FCMPX96
  904.                 MOVE.W        #FFEXT96+FOCMP,-(SP)
  905.                 _FP68K
  906.                 ENDM
  907.  
  908.                 MACRO
  909.                 FCMPD96
  910.                 MOVE.W        #FFDBL+FFEXT96+FOCMP,-(SP)
  911.                 _FP68K
  912.                 ENDM
  913.  
  914.                 MACRO
  915.                 FCMPS96
  916.                 MOVE.W        #FFSGL+FFEXT96+FOCMP,-(SP)
  917.                 _FP68K
  918.                 ENDM
  919.  
  920.                 MACRO
  921.                 FCMPC96
  922.                 MOVE.W        #FFCOMP+FFEXT96+FOCMP,-(SP)
  923.                 _FP68K
  924.                 ENDM
  925.  
  926.                 MACRO
  927.                 FCMPI96
  928.                 MOVE.W        #FFINT+FFEXT96+FOCMP,-(SP)
  929.                 _FP68K
  930.                 ENDM
  931.  
  932.                 MACRO
  933.                 FCMPL96
  934.                 MOVE.W        #FFLNG+FFEXT96+FOCMP,-(SP)
  935.                 _FP68K
  936.                 ENDM
  937.  
  938. ;———————————————————————————————————————————————————————————
  939. ; Compare, signaling invalid on unordered.
  940. ;———————————————————————————————————————————————————————————
  941. ; 80-bit extended format
  942.                 MACRO
  943.                 FCPXX
  944.                 MOVE.W        #FFEXT+FOCPX,-(SP)
  945.                 _FP68K
  946.                 ENDM
  947.  
  948.                 MACRO
  949.                 FCPXD
  950.                 MOVE.W        #FFDBL+FOCPX,-(SP)
  951.                 _FP68K
  952.                 ENDM
  953.  
  954.                 MACRO
  955.                 FCPXS
  956.                 MOVE.W        #FFSGL+FOCPX,-(SP)
  957.                 _FP68K
  958.                 ENDM
  959.  
  960.                 MACRO
  961.                 FCPXC
  962.                 MOVE.W        #FFCOMP+FOCPX,-(SP)
  963.                 _FP68K
  964.                 ENDM
  965.  
  966.                 MACRO
  967.                 FCPXI
  968.                 MOVE.W        #FFINT+FOCPX,-(SP)
  969.                 _FP68K
  970.                 ENDM
  971.  
  972.                 MACRO
  973.                 FCPXL
  974.                 MOVE.W        #FFLNG+FOCPX,-(SP)
  975.                 _FP68K
  976.                 ENDM
  977.  
  978. ; 96-bit extended format
  979.                 MACRO
  980.                 FCPXX96
  981.                 MOVE.W        #FFEXT96+FOCPX,-(SP)
  982.                 _FP68K
  983.                 ENDM
  984.  
  985.                 MACRO
  986.                 FCPXD96
  987.                 MOVE.W        #FFDBL+FFEXT96+FOCPX,-(SP)
  988.                 _FP68K
  989.                 ENDM
  990.  
  991.                 MACRO
  992.                 FCPXS96
  993.                 MOVE.W        #FFSGL+FFEXT96+FOCPX,-(SP)
  994.                 _FP68K
  995.                 ENDM
  996.  
  997.                 MACRO
  998.                 FCPXC96
  999.                 MOVE.W        #FFCOMP+FFEXT96+FOCPX,-(SP)
  1000.                 _FP68K
  1001.                 ENDM
  1002.  
  1003.                 MACRO
  1004.                 FCPXI96
  1005.                 MOVE.W        #FFINT+FFEXT96+FOCPX,-(SP)
  1006.                 _FP68K
  1007.                 ENDM
  1008.  
  1009.                 MACRO
  1010.                 FCPXL96
  1011.                 MOVE.W        #FFLNG+FFEXT96+FOCPX,-(SP)
  1012.                 _FP68K
  1013.                 ENDM
  1014.  
  1015. ;———————————————————————————————————————————————————————————
  1016. ; The following defines a set of so-called floating
  1017. ; branches. They presume that an appropriate compare
  1018. ; operation, FCMPz, FCMPz96, FCPXz or FCPXz96, precedes.
  1019. ;———————————————————————————————————————————————————————————
  1020.                 MACRO
  1021.                 FBEQL
  1022.                 BEQ         &SYSLIST[1]
  1023.                 ENDM
  1024.  
  1025.                 MACRO
  1026.                 FBLTL
  1027.                 BCS         &SYSLIST[1]
  1028.                 ENDM
  1029.  
  1030.                 MACRO
  1031.                 FBLEL
  1032.                 BLS         &SYSLIST[1]
  1033.                 ENDM
  1034.  
  1035.                 MACRO
  1036.                 FBGTL
  1037.                 BGT         &SYSLIST[1]
  1038.                 ENDM
  1039.  
  1040.                 MACRO
  1041.                 FBGEL
  1042.                 BGE         &SYSLIST[1]
  1043.                 ENDM
  1044.  
  1045.                 MACRO
  1046.                 FBULTL
  1047.                 BLT         &SYSLIST[1]
  1048.                 ENDM
  1049.  
  1050.                 MACRO
  1051.                 FBULEL
  1052.                 BLE         &SYSLIST[1]
  1053.                 ENDM
  1054.  
  1055.                 MACRO
  1056.                 FBUGTL
  1057.                 BHI         &SYSLIST[1]
  1058.                 ENDM
  1059.  
  1060.                 MACRO
  1061.                 FBUGEL
  1062.                 BCC         &SYSLIST[1]
  1063.                 ENDM
  1064.  
  1065.                 MACRO
  1066.                 FBUL
  1067.                 BVS         &SYSLIST[1]
  1068.                 ENDM
  1069.  
  1070.                 MACRO
  1071.                 FBOL
  1072.                 BVC         &SYSLIST[1]
  1073.                 ENDM
  1074.  
  1075.                 MACRO
  1076.                 FBNEL
  1077.                 BNE         &SYSLIST[1]
  1078.                 ENDM
  1079.  
  1080.                 MACRO
  1081.                 FBUEL
  1082.                 BEQ         &SYSLIST[1]
  1083.                 BVS         &SYSLIST[1]
  1084.                 ENDM
  1085.  
  1086.                 MACRO
  1087.                 FBLGL
  1088.                 BCS         &SYSLIST[1]
  1089.                 BGT         &SYSLIST[1]
  1090.                 ENDM
  1091.  
  1092. ;———————————————————————————————————————————————————————————
  1093. ; Short branch versions.
  1094. ;———————————————————————————————————————————————————————————
  1095.                 MACRO
  1096.                 FBEQS
  1097.                 BEQ.S        &SYSLIST[1]
  1098.                 ENDM
  1099.  
  1100.                 MACRO
  1101.                 FBLTS
  1102.                 BCS.S        &SYSLIST[1]
  1103.                 ENDM
  1104.  
  1105.                 MACRO
  1106.                 FBLES
  1107.                 BLS.S        &SYSLIST[1]
  1108.                 ENDM
  1109.  
  1110.                 MACRO
  1111.                 FBGTS
  1112.                 BGT.S        &SYSLIST[1]
  1113.                 ENDM
  1114.  
  1115.                 MACRO
  1116.                 FBGES
  1117.                 BGE.S        &SYSLIST[1]
  1118.                 ENDM
  1119.  
  1120.                 MACRO
  1121.                 FBULTS
  1122.                 BLT.S        &SYSLIST[1]
  1123.                 ENDM
  1124.  
  1125.                 MACRO
  1126.                 FBULES
  1127.                 BLE.S        &SYSLIST[1]
  1128.                 ENDM
  1129.  
  1130.                 MACRO
  1131.                 FBUGTS
  1132.                 BHI.S        &SYSLIST[1]
  1133.                 ENDM
  1134.  
  1135.                 MACRO
  1136.                 FBUGES
  1137.                 BCC.S        &SYSLIST[1]
  1138.                 ENDM
  1139.  
  1140.                 MACRO
  1141.                 FBUS
  1142.                 BVS.S        &SYSLIST[1]
  1143.                 ENDM
  1144.  
  1145.                 MACRO
  1146.                 FBOS
  1147.                 BVC.S        &SYSLIST[1]
  1148.                 ENDM
  1149.  
  1150.                 MACRO
  1151.                 FBNES
  1152.                 BNE.S        &SYSLIST[1]
  1153.                 ENDM
  1154.  
  1155.                 MACRO
  1156.                 FBUES
  1157.                 BEQ.S        &SYSLIST[1]
  1158.                 BVS.S        &SYSLIST[1]
  1159.                 ENDM
  1160.  
  1161.                 MACRO
  1162.                 FBLGS
  1163.                 BCS.S        &SYSLIST[1]
  1164.                 BGT.S        &SYSLIST[1]
  1165.                 ENDM
  1166.  
  1167. ;———————————————————————————————————————————————————————————
  1168. ; Class and sign inquiries.
  1169. ;———————————————————————————————————————————————————————————
  1170. FCSNAN            EQU         1                        ; signaling NAN
  1171. FCQNAN            EQU         2                        ; quiet NAN
  1172. FCINF            EQU         3                        ; infinity
  1173. FCZERO            EQU         4                        ; zero
  1174. FCNORM            EQU         5                        ; normal number
  1175. FCDENORM        EQU         6                        ; denormal number
  1176.  
  1177.                 MACRO
  1178.                 FCLASSC
  1179.                 MOVE.W        #FFCOMP+FOCLASS,-(SP)
  1180.                 _FP68K
  1181.                 ENDM
  1182.  
  1183.                 MACRO
  1184.                 FCLASSS
  1185.                 MOVE.W        #FFSGL+FOCLASS,-(SP)
  1186.                 _FP68K
  1187.                 ENDM
  1188.  
  1189.                 MACRO
  1190.                 FCLASSD
  1191.                 MOVE.W        #FFDBL+FOCLASS,-(SP)
  1192.                 _FP68K
  1193.                 ENDM
  1194.  
  1195. ; 80-bit extended format
  1196.                 MACRO
  1197.                 FCLASSX
  1198.                 MOVE.W        #FFEXT+FOCLASS,-(SP)
  1199.                 _FP68K
  1200.                 ENDM
  1201.  
  1202. ; 96-bit extended format
  1203.                 MACRO
  1204.                 FCLASSX96
  1205.                 MOVE.W        #FFEXT96+FOCLASS,-(SP)
  1206.                 _FP68K
  1207.                 ENDM
  1208.  
  1209. ;———————————————————————————————————————————————————————————
  1210. ; Bit indexes for bytes of floating point environment word.
  1211. ;———————————————————————————————————————————————————————————
  1212. FBINVALID        EQU         0                        ; invalid operation
  1213. FBUFLOW         EQU         1                        ; underflow
  1214. FBOFLOW         EQU         2                        ; overflow
  1215. FBDIVZER        EQU         3                        ; division by zero
  1216. FBINEXACT        EQU         4                        ; inexact
  1217. FBRNDLO         EQU         5                        ; low bit of rounding mode
  1218. FBRNDHI         EQU         6                        ; high bit of rounding mode
  1219. FBLSTRND        EQU         7                        ; last round result bit
  1220. FBDBL            EQU         5                        ; double precision control
  1221. FBSGL            EQU         6                        ; single precision control
  1222.  
  1223. ;———————————————————————————————————————————————————————————
  1224. ; Get and set environment.
  1225. ;———————————————————————————————————————————————————————————
  1226.                 MACRO
  1227.                 FGETENV
  1228.                 MOVE.W        #FOGETENV,-(SP)
  1229.                 _FP68K
  1230.                 ENDM
  1231.  
  1232.                 MACRO
  1233.                 FSETENV
  1234.                 MOVE.W        #FOSETENV,-(SP)
  1235.                 _FP68K
  1236.                 ENDM
  1237.  
  1238. ;———————————————————————————————————————————————————————————
  1239. ; Test and set exception.
  1240. ;———————————————————————————————————————————————————————————
  1241.                 MACRO
  1242.                 FTESTXCP
  1243.                 MOVE.W        #FOTESTXCP,-(SP)
  1244.                 _FP68K
  1245.                 ENDM
  1246.  
  1247.                 MACRO
  1248.                 FSETXCP
  1249.                 MOVE.W        #FOSETXCP,-(SP)
  1250.                 _FP68K
  1251.                 ENDM
  1252.  
  1253. ;———————————————————————————————————————————————————————————
  1254. ; Procedure entry and exit.
  1255. ;———————————————————————————————————————————————————————————
  1256.                 MACRO
  1257.                 FPROCENTRY
  1258.                 MOVE.W        #FOPROCENTRY,-(SP)
  1259.                 _FP68K
  1260.                 ENDM
  1261.  
  1262.                 MACRO
  1263.                 FPROCEXIT
  1264.                 MOVE.W        #FOPROCEXIT,-(SP)
  1265.                 _FP68K
  1266.                 ENDM
  1267.  
  1268. ;———————————————————————————————————————————————————————————
  1269. ; Get and set halt vector.
  1270. ;———————————————————————————————————————————————————————————
  1271.                 MACRO
  1272.                 FGETHV
  1273.                 MOVE.W        #FOGETHV,-(SP)
  1274.                 _FP68K
  1275.                 ENDM
  1276.  
  1277.                 MACRO
  1278.                 FSETHV
  1279.                 MOVE.W        #FOSETHV,-(SP)
  1280.                 _FP68K
  1281.                 ENDM
  1282.  
  1283.  
  1284.  
  1285. ;———————————————————————————————————————————————————————————
  1286. ; Elementary function operation code masks.
  1287. ;———————————————————————————————————————————————————————————
  1288. ELEXT96            EQU            $0080                    ; 96-bit extended format
  1289. FOLNX            EQU         $0000                    ; base-e log
  1290. FOLOG2X         EQU         $0002                    ; base-2 log
  1291. FOLN1X            EQU         $0004                    ; ln (1 + x)
  1292. FOLOG21X        EQU         $0006                    ; log2 (1 + x)
  1293. FOEXPX            EQU         $0008                    ; base-e exponential
  1294. FOEXP2X         EQU         $000A                    ; base-2 exponential
  1295. FOEXP1X         EQU         $000C                    ; exp (x) - 1
  1296. FOEXP21X        EQU         $000E                    ; exp2 (x) - 1
  1297. FOXPWRI         EQU         $8010                    ; integer exponentiation
  1298. FOXPWRY         EQU         $8012                    ; general exponentiation
  1299. FOCOMPOUND        EQU         $C014                    ; compound
  1300. FOANNUITY        EQU         $C016                    ; annuity
  1301. FOSINX            EQU         $0018                    ; sine
  1302. FOCOSX            EQU         $001A                    ; cosine
  1303. FOTANX            EQU         $001C                    ; tangent
  1304. FOATANX         EQU         $001E                    ; arctangent
  1305. FORANDX         EQU         $0020                    ; random
  1306.  
  1307. ;———————————————————————————————————————————————————————————
  1308. ; Elementary functions.
  1309. ;———————————————————————————————————————————————————————————
  1310. ; 80-bit extended format
  1311.                 MACRO
  1312.                 FLNX                                ; base-e log
  1313.                 MOVE.W        #FOLNX,-(SP)
  1314.                 _ELEMS68K
  1315.                 ENDM
  1316.  
  1317.                 MACRO
  1318.                 FLOG2X                                ; base-2 log
  1319.                 MOVE.W        #FOLOG2X,-(SP)
  1320.                 _ELEMS68K
  1321.                 ENDM
  1322.  
  1323.                 MACRO
  1324.                 FLN1X                                ; ln (1 + x)
  1325.                 MOVE.W        #FOLN1X,-(SP)
  1326.                 _ELEMS68K
  1327.                 ENDM
  1328.  
  1329.                 MACRO
  1330.                 FLOG21X                             ; log2 (1 + x)
  1331.                 MOVE.W        #FOLOG21X,-(SP)
  1332.                 _ELEMS68K
  1333.                 ENDM
  1334.  
  1335.                 MACRO
  1336.                 FEXPX                                ; base-e exponential
  1337.                 MOVE.W        #FOEXPX,-(SP)
  1338.                 _ELEMS68K
  1339.                 ENDM
  1340.  
  1341.                 MACRO
  1342.                 FEXP2X                                ; base-2 exponential
  1343.                 MOVE.W        #FOEXP2X,-(SP)
  1344.                 _ELEMS68K
  1345.                 ENDM
  1346.  
  1347.                 MACRO
  1348.                 FEXP1X                                ; exp (x) - 1
  1349.                 MOVE.W        #FOEXP1X,-(SP)
  1350.                 _ELEMS68K
  1351.                 ENDM
  1352.  
  1353.                 MACRO
  1354.                 FEXP21X                             ; exp2 (x) - 1
  1355.                 MOVE.W        #FOEXP21X,-(SP)
  1356.                 _ELEMS68K
  1357.                 ENDM
  1358.  
  1359.                 MACRO
  1360.                 FXPWRI                                ; integer exponential
  1361.                 MOVE.W        #FOXPWRI,-(SP)
  1362.                 _ELEMS68K
  1363.                 ENDM
  1364.  
  1365.                 MACRO
  1366.                 FXPWRY                                ; general exponential
  1367.                 MOVE.W        #FOXPWRY,-(SP)
  1368.                 _ELEMS68K
  1369.                 ENDM
  1370.  
  1371.                 MACRO
  1372.                 FCOMPOUND                            ; compound
  1373.                 MOVE.W        #FOCOMPOUND,-(SP)
  1374.                 _ELEMS68K
  1375.                 ENDM
  1376.  
  1377.                 MACRO
  1378.                 FANNUITY                            ; annuity
  1379.                 MOVE.W        #FOANNUITY,-(SP)
  1380.                 _ELEMS68K
  1381.                 ENDM
  1382.  
  1383.                 MACRO
  1384.                 FSINX                                ; sine
  1385.                 MOVE.W        #FOSINX,-(SP)
  1386.                 _ELEMS68K
  1387.                 ENDM
  1388.  
  1389.                 MACRO
  1390.                 FCOSX                                ; cosine
  1391.                 MOVE.W        #FOCOSX,-(SP)
  1392.                 _ELEMS68K
  1393.                 ENDM
  1394.  
  1395.                 MACRO
  1396.                 FTANX                                ; tangent
  1397.                 MOVE.W        #FOTANX,-(SP)
  1398.                 _ELEMS68K
  1399.                 ENDM
  1400.  
  1401.                 MACRO
  1402.                 FATANX                                ; arctangent
  1403.                 MOVE.W        #FOATANX,-(SP)
  1404.                 _ELEMS68K
  1405.                 ENDM
  1406.  
  1407.                 MACRO
  1408.                 FRANDX                                ; random number generator
  1409.                 MOVE.W        #FORANDX,-(SP)
  1410.                 _ELEMS68K
  1411.                 ENDM
  1412.  
  1413. ; 96-bit extended format
  1414.                 MACRO
  1415.                 FLNX96                                ; base-e log
  1416.                 MOVE.W        #ELEXT96+FOLNX,-(SP)
  1417.                 _ELEMS68K
  1418.                 ENDM
  1419.  
  1420.                 MACRO
  1421.                 FLOG2X96                                ; base-2 log
  1422.                 MOVE.W        #ELEXT96+FOLOG2X,-(SP)
  1423.                 _ELEMS68K
  1424.                 ENDM
  1425.  
  1426.                 MACRO
  1427.                 FLN1X96                                ; ln (1 + x)
  1428.                 MOVE.W        #ELEXT96+FOLN1X,-(SP)
  1429.                 _ELEMS68K
  1430.                 ENDM
  1431.  
  1432.                 MACRO
  1433.                 FLOG21X96                             ; log2 (1 + x)
  1434.                 MOVE.W        #ELEXT96+FOLOG21X,-(SP)
  1435.                 _ELEMS68K
  1436.                 ENDM
  1437.  
  1438.                 MACRO
  1439.                 FEXPX96                                ; base-e exponential
  1440.                 MOVE.W        #ELEXT96+FOEXPX,-(SP)
  1441.                 _ELEMS68K
  1442.                 ENDM
  1443.  
  1444.                 MACRO
  1445.                 FEXP2X96                                ; base-2 exponential
  1446.                 MOVE.W        #ELEXT96+FOEXP2X,-(SP)
  1447.                 _ELEMS68K
  1448.                 ENDM
  1449.  
  1450.                 MACRO
  1451.                 FEXP1X96                                ; exp (x) - 1
  1452.                 MOVE.W        #ELEXT96+FOEXP1X,-(SP)
  1453.                 _ELEMS68K
  1454.                 ENDM
  1455.  
  1456.                 MACRO
  1457.                 FEXP21X96                             ; exp2 (x) - 1
  1458.                 MOVE.W        #ELEXT96+FOEXP21X,-(SP)
  1459.                 _ELEMS68K
  1460.                 ENDM
  1461.  
  1462.                 MACRO
  1463.                 FXPWRI96                                ; integer exponential
  1464.                 MOVE.W        #ELEXT96+FOXPWRI,-(SP)
  1465.                 _ELEMS68K
  1466.                 ENDM
  1467.  
  1468.                 MACRO
  1469.                 FXPWRY96                                ; general exponential
  1470.                 MOVE.W        #ELEXT96+FOXPWRY,-(SP)
  1471.                 _ELEMS68K
  1472.                 ENDM
  1473.  
  1474.                 MACRO
  1475.                 FCOMPOUND96                            ; compound
  1476.                 MOVE.W        #ELEXT96+FOCOMPOUND,-(SP)
  1477.                 _ELEMS68K
  1478.                 ENDM
  1479.  
  1480.                 MACRO
  1481.                 FANNUITY96                            ; annuity
  1482.                 MOVE.W        #ELEXT96+FOANNUITY,-(SP)
  1483.                 _ELEMS68K
  1484.                 ENDM
  1485.  
  1486.                 MACRO
  1487.                 FSINX96                                ; sine
  1488.                 MOVE.W        #ELEXT96+FOSINX,-(SP)
  1489.                 _ELEMS68K
  1490.                 ENDM
  1491.  
  1492.                 MACRO
  1493.                 FCOSX96                                ; cosine
  1494.                 MOVE.W        #ELEXT96+FOCOSX,-(SP)
  1495.                 _ELEMS68K
  1496.                 ENDM
  1497.  
  1498.                 MACRO
  1499.                 FTANX96                                ; tangent
  1500.                 MOVE.W        #ELEXT96+FOTANX,-(SP)
  1501.                 _ELEMS68K
  1502.                 ENDM
  1503.  
  1504.                 MACRO
  1505.                 FATANX96                                ; arctangent
  1506.                 MOVE.W        #ELEXT96+FOATANX,-(SP)
  1507.                 _ELEMS68K
  1508.                 ENDM
  1509.  
  1510.                 MACRO
  1511.                 FRANDX96                                ; random number generator
  1512.                 MOVE.W        #ELEXT96+FORANDX,-(SP)
  1513.                 _ELEMS68K
  1514.                 ENDM
  1515.  
  1516. ;———————————————————————————————————————————————————————————
  1517. ; Scanner and formatter operation code masks
  1518. ;———————————————————————————————————————————————————————————
  1519.  
  1520. FOPSTR2DEC        EQU         $0002                    ;Pascal string to decimal record
  1521. FOCSTR2DEC        EQU         $0004                    ;C string to decimal record
  1522. FODEC2STR        EQU         $0003                    ;decimal record to Pascal string
  1523.  
  1524. ;———————————————————————————————————————————————————————————
  1525. ; Scanner and formatter functions
  1526. ;———————————————————————————————————————————————————————————
  1527.  
  1528. ;Pascal string to decimal record
  1529.  
  1530.                 MACRO
  1531.                 FPSTR2DEC
  1532.                 MOVE.W        #FOPSTR2DEC, -(SP)
  1533.                 _DecStr68K
  1534.                 ENDM
  1535.  
  1536. ;C string to decimal record
  1537.  
  1538.                 MACRO
  1539.                 FCSTR2DEC
  1540.                 MOVE.W        #FOCSTR2DEC, -(SP)
  1541.                 _DecStr68K
  1542.                 ENDM
  1543.  
  1544. ;decimal record to Pascal string
  1545.  
  1546.                 MACRO
  1547.                 FDEC2STR
  1548.                 MOVE.W        #FODEC2STR, -(SP)
  1549.                 _DecStr68K
  1550.                 ENDM
  1551.  
  1552.  
  1553.  
  1554. ;———————————————————————————————————————————————————————————
  1555. ; NaN codes.
  1556. ;———————————————————————————————————————————————————————————
  1557. NANSQRT         EQU         1                        ; Invalid square root such as sqrt(-1).
  1558. NANADD            EQU         2                        ; Invalid addition such as +INF - +INF.
  1559. NANDIV            EQU         4                        ; Invalid division such as 0/0.
  1560. NANMUL            EQU         8                        ; Invalid multiply such as 0 * INF.
  1561. NANREM            EQU         9                        ; Invalid remainder or mod such as x REM 0.
  1562. NANASCBIN        EQU         17                        ; Attempt to convert invalid ASCII string.
  1563. NANCOMP         EQU         20                        ; Result of converting comp NaN to floating.
  1564. NANZERO         EQU         21                        ; Attempt to create a NaN with a zero code.
  1565. NANTRIG         EQU         33                        ; Invalid argument to trig routine.
  1566. NANINVTRIG        EQU         34                        ; Invalid argument to inverse trig routine.
  1567. NANLOG            EQU         36                        ; Invalid argument to log routine.
  1568. NANPOWER        EQU         37                        ; Invalid argument to x^i or x^y routine.
  1569. NANFINAN        EQU         38                        ; Invalid argument to financial function.
  1570. NANINIT         EQU         255                     ; Uninitialized storage.
  1571.